package tool;

import java.io.*;

public class FileUtil {

    // 读取文件方法
    // 参数: 文件路径
    // 返回值: 文件内容String
    public static String readFile(String filePath) {
        StringBuilder content = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                content.append(line).append(System.lineSeparator());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return content.toString().trim(); // 去掉末尾可能的多余换行符
    }

    // 写入文件方法
    // 参数: 文件路径, 文件内容
    // 返回值: void
    public static void writeFile(String filePath, String content) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath))) {
            bw.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 写入文件(覆盖写入)
    // 参数: 文件路径, 文件内容
    // 返回值: void
    public static void writeFileCover(String filePath, String content) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath))) {
            bw.write(content);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 写入文件(继续写入)
    // 参数: 文件路径, 文件内容
    // 返回值: void
    public static void appendFile(String filePath, String content) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath, true))) {
            bw.write(content);
            //不要乱加换行
            //bw.newLine(); // 添加一个新行，以便下次追加内容时不会直接跟在当前内容后面
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 读取二进制文件内容到字节数组
     *
     * @param filePath 文件路径
     * @return 文件内容的字节数组
     * @throws IOException 如果发生I/O错误
     */
    public static byte[] readFileToByteArray(String filePath) throws IOException {
        File file = new File(filePath);
        try (FileInputStream fis = new FileInputStream(file)) {
            // 创建一个足够大的字节数组来存储文件内容
            byte[] bytes = new byte[(int) file.length()];
            // 读取文件内容到字节数组
            int bytesRead = fis.read(bytes);
            if (bytesRead != file.length()) {
                throw new IOException("Could not read the entire file");
            }
            return bytes;
        }
    }

    /**
     * 将字节数组写入二进制文件
     *
     * @param filePath 文件路径
     * @param data     要写入文件的字节数组
     * @throws IOException 如果发生I/O错误
     */
    public static void writeByteArrayToFile(String filePath, byte[] data) throws IOException {
        File file = new File(filePath);
        try (FileOutputStream fos = new FileOutputStream(file)) {
            // 将字节数组写入文件
            fos.write(data);
        }
    }

    // 测试方法（可选）
    public static void main(String[] args) {
        String testFilePath = "moviedata/movie.txt";
        String testContent = "Hello, this is a test file!";

        // 写入测试内容
        //FileUtil.writeFile(testFilePath, testContent);
        //System.out.println("File written successfully.");

        // 读取并打印文件内容
        String fileContent = FileUtil.readFile(testFilePath);
        System.out.println("File content: " + fileContent);
    }
}